// 这是使用stat函数来获得argv指定文件类型的实例
// 应用代码首先使用lstat函数获得argv制定文件的属性参数，并且将其放入stat_buf结构体中
// 使用屏蔽码S_IFMT对st_mode中的文件类型进行屏蔽后再用switch语句对屏蔽结果进行判断
// 最后输出相应的结构
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
	
	// 创建临时变量，用来记录lstat函数的返回值
	int df;

	// 创建stat结构体指针，用来指向stat的返回值
	struct stat stat_buf;

	if(argc != 2){
		printf("Please input the current para!\n");
		return -1;
	}
	
	// 使用lstat函数获取文件的符号链接
	df = stat(argv[1], &stat_buf);
	
	if(df == -1){
		printf("获取文件属性失败！\n");
		return -2;
	}

	// 使用屏蔽码S_IFMT对st_mode中的文件类型进行判断
	switch(stat_buf.st_mode & S_IFMT){
		case S_IFDIR:
			printf("该文件为目录文件！\n");
			break;
		case S_IFREG:
			printf("该文件为普通文件!\n");
			break;
		default:
			printf("该文件为其他类型!\n");
			break;
	}

	return 0;
}
